package top.kaoshanji.p1ch12a;

/**
 * 代码清单-p1ch12a-114页a：游戏者
 * @author kaoshanji
 * ^_^
 * create time 2025/3/22 16:43
 */
public class GamePlayer implements IGamePlayer {

    // 成员属性 属于 对象
    // 通过构造函数（外部传入）初始化赋值，或者在创建对象之后，通过 set 方法（外部传入）为成员属性赋值
    // 在外部传入值时，具体的值是根据需要指定，成员属性有默认值
    // 如此一来，这个对象的这个属性就有值了，可以被该对象的各个方法使用了
    // 成员属性 就是 数据，方法 就是 逻辑

    // 如果不被锁定，那么不同的线程在持有对象期间都可以通过调用不同的方法修改属性的值，这自然就冲突了（不知道最终的结果是什么）
    // 所以才需要被锁定
    // 每个对象都有自己的锁，其实线程持有的是对象的锁，这样在特定的时间内只有一个线程能够执行该对象，表现出来该对象只能被该线程执行
    // 锁保护资源或者说临界区，线程通过持有锁操作资源
    // 所以需要分析锁保护的是什么，线程如何获得锁，锁的具体表现形式
    private String name = "";

    // 通过构造函数传递名称
    public GamePlayer(String name) {
        this.name = name;
    }

    // 进游戏之前，你肯定要登录吧，这是一个必要条件
    @Override
    public void login(String user, String password) {
        System.out.println("登录名为 " + user + " 的用户 " + this.name + " 登录成功");
    }

    // 打怪，最期望的就是杀老怪
    @Override
    public void killBoss() {
        System.out.println(this.name + " 在打怪...");
    }

    // 升级，升级有很多方法，花钱买是一种，做任务也是一种
    @Override
    public void upgrade() {
        System.out.println(this.name + " 右升了一级...");
    }
}
